#ifndef NATIAVISOLATIONDILOG_H
#define NATIAVISOLATIONDILOG_H

#include "cominfo.h"
#include "widgets/defendertable.h"
#include "resultdelegate.h"
#include "antivirus/antiviruswork.h"
#include "devcommon_global.h"

#include <QVector>
#include <QWidget>
#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QTableView>
#include <QCheckBox>
#include <QPushButton>
#include <QTableView>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QStackedWidget>

#include <QCheckBox>
#include <QFrame>
//#include <QSpinner>
#include <QLabel>
#include <QTimer>


class DBusInvokerInterface;

/*
@classname:(NatiavIsolationDilog)
@author：(mxz)
@discptions:(病毒查杀  隔离区弹框)
@datatime:(04-30)
*/
class DEVCOMMONSHARED_EXPORT NatiavIsolationDilog : public QFrame
{
    Q_OBJECT
public:
    explicit NatiavIsolationDilog(AntiVirusWork *work, QWidget *parent = nullptr);
    ~NatiavIsolationDilog();

    // 界面初始化
    void initGUI();
    // 初始化中间tableview布局
    QHBoxLayout *initTableWidget();

    // 判断全选按钮状态
    Q_SLOT void checkBoxAllStatus();
    // 添加
    void appendFileInfo(TrustFileInfo info);
    // 设置当前进度
    void setCurrentProcess(int nCurrent);

protected:
    void resizeEvent(QResizeEvent *event);
    void closeEvent(QCloseEvent *event);

    bool eventFilter(QObject *obj, QEvent *event);
    // 表头点击排序
    Q_SLOT void sortByTableHeaderClicked(int index);
    // 给按钮过长字符串添加省略号和提示
    void elideBtnText();

signals:
    // 移除隔离文件
    void requestRemoveIsolationFile(QString sPath);
    // 请求更新隔离区显示数量
    void notifyUpdateIsolationSize();

public slots:
    // 全选选中
    void checkAll(int nStatus);
    // 移除信任
    void deleteIsolation();
    // table表的单选
    void tableCheckItem();
    // 接受到的隔离文件
    void receptionIsolationFile(QList<TrustFileInfo> sInfos);

private:
    AntiVirusWork *m_work;
    DBusInvokerInterface *m_monitorInterFaceServer; // 流量监控dbus类

    QCheckBox *m_checkBoxAll; // 全选框
    QStandardItemModel *m_model;
    QPushButton *m_pBIsolation; // 移除隔离按钮
    QTableView *m_tableView;
    QLabel *m_proLable; // 加载进度
    QList<TrustFileInfo> m_isolationList;
    int m_total; // 总数
    int m_curret; // 当前
    bool m_quit; // 是否退出
    bool m_loadingFlag; //加载标志
    ResultDelegate *m_delegate; //表格代理
};

#endif // NATIAVISOLATIONDILOG_H
